package com.cn.yunhe.rentcars.web;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import com.cn.yunhe.rentcars.mapper.ResourceMapper;
import com.cn.yunhe.rentcars.model.Resource;
import com.fasterxml.jackson.databind.JsonNode;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

/**
 * 权限管理--系统资源管理
 * @author 赵志学
 *
 */
@RestController
public class ResourceController {
	@Autowired
	private ResourceMapper resourceMapper;
	//TODO 添加系统资源管理 URL=/resourcesadd,method=POST
	/**
	 * 跳转到添加系统资源信息页面
	 * @return
	 */
	@RequestMapping(value="/resourcesadd",method=RequestMethod.GET)
	public ModelAndView resourceadd(){
		return new ModelAndView("resources-add");
	}
	/**
	 * 将添加系统资源信息页面提交的信息 进行持久化。
	 * @param resource 系统资源对象
	 */
	@RequestMapping(value="/saveResourceAdd",method=RequestMethod.POST)
	public void saveResourceAdd(@RequestBody Resource resource){
		//System.out.println("保存系统资源"+resource.getPermisname());
		//int count = resourceMapper.getResourceCount();//从数据库中读取当前数据库总所有的记录总条数。
		//resource.setParentid(Integer.toString(count+1));
		resourceMapper.addResource(resource);
		//System.out.println("添加成功");
	}
	//TODO 删除系统资源管理 URL=/resourcedelete/{resourceId},method=DELETE
	/**
	 * 从页面获取资源ID 根据ID删除对应的数据。
	 * @param permisid
	 */
	@RequestMapping(value="/resourcedelete",method=RequestMethod.POST)
	public void delResource(@RequestParam String permisid){
		//System.out.println("删除指定数据库:"+permisid);
		resourceMapper.deleteResource(permisid);
		//System.out.println("删除成功");
	}
	/**
	 * 根据用户选择，进行批量删除信息。
	 * @param permissid
	 */
	@RequestMapping(value="/delResources",method=RequestMethod.POST)
	public void delResources(@RequestParam String permissid){
		//System.out.println("批量删除："+permissid);
		List<String> perlist = Arrays.asList(permissid.split(","));//将字符串转换成list集合。
		resourceMapper.deleteResources(perlist);
		//System.out.println("成功");
	}	
	/**
	 * 修改系统资源管理 URL=/resources/edit/{resourceId},method=PUT
	 * 根据用户选择的 资源ＩＤ 查出对应的信息，传递到系统资源修改页面。
	 * @param permissid
	 * @return 系统资源修改页面
	 */
	@RequestMapping(value="/resourcesedit",method=RequestMethod.GET)
	public ModelAndView resourceEdit(@RequestParam String permisid){
		//System.out.println("查询一条信息:"+permisid);
		//从数据库对去对应ID的所有信息。
		Resource resource = resourceMapper.selectResource(permisid);
		Map<String , Resource> map = new HashMap<String,Resource>();
		//System.out.println("名字："+resource.getPermisname());
		map.put("resource", resource);
		return new ModelAndView("resources-edid",map);
	}
	/**
	 * 保存页面修改过后的权限资源信息。
	 * @param resource  权限资源对象
	 */
	public void saveEditResource(@RequestParam Resource resource){
		//System.out.println("保存修改的权限资源信息");
		resourceMapper.editResource(resource);
		//System.out.println("保存修改的权限资源信息成功");
	}	
	/**
	 * 跳转到：查询系统资源管理页面 URL=/resources,method=GET
	 * @return
	 */
	@RequestMapping(value="/resourceslist",method=RequestMethod.GET)
	public ModelAndView resourcesList(){
		//System.out.println("跳转页面权限资源");
		return new ModelAndView("resources-list");
	}
	/**
	 * 页面回调该方法，从数据库获取所有的系统权限资源信息，并且返回到页面中区。
	 * 以 map 集合的形式返回，（map里面的信息格式是json g格式）s
	 * @return
	 */
	public Map<String,Object> getResources(@RequestParam int start,@RequestParam int length,@RequestParam int draw){
		//System.out.println("从数据库查询权限资源信息");
		int pageNum = start/length+1;//每页数据的起始记录数
		int pageSize = length; //每页显示的记录总数。
		Map<String,String> map = new HashMap<String,String>();//模糊查询时传递参数。
		PageHelper.startPage(pageNum,pageSize);//初始化分页对象。
		List<Resource> resList = resourceMapper.findResources(map);
		PageInfo<Resource> page = new PageInfo<Resource>(resList);//利用分页对象的 pageInfo类，将查询到的数据，每次按指定条数返回给页面。
		
		Map<String,Object> rsMap = new HashMap<String,Object>();//以json的形式传递参数给页面.
		rsMap.put("draw", draw);
		rsMap.put("data", page.getList());	      
	    rsMap.put("recordsTotal", page.getTotal());
	    rsMap.put("recordsFiltered", page.getTotal());
		return rsMap;
	}
	/**
	 * 测试方法，从数据库读取所有的权限信息，生成一个json格式数据。
	 */
	@RequestMapping(value="/getResToJson",method=RequestMethod.GET)
	public List<Map<String,String>> getResToJson(){
		//System.out.println("从数据库查询权限资源信息,生成json格式");
		Map<String,String> mapJson = null;
		List<Map<String,String>> list = new ArrayList<Map<String,String>>();
		Map<String,String> map = new HashMap<String,String>();//模糊查询时传递参数。
		List<Resource> resList = resourceMapper.findResources(map);
		
		for(Resource rc : resList){
			mapJson = new HashMap<String,String>();
			mapJson.put("id", rc.getPermisid());
			mapJson.put("pId", rc.getParentid());
			mapJson.put("name",rc.getPermisname());
			mapJson.put("resType", rc.getPermistype());
			list.add(mapJson);
		}
		return list;
	}
	/**
	 * 跳转到树形列表页面
	 * @return
	 */
	@RequestMapping(value="/getResTree",method=RequestMethod.GET)
	public ModelAndView getResourceTree(){
		return new ModelAndView("resources-tree");
	}
	/**
	 * 跳转到权限资源查看操作页面
	 * 从数据库获取最终节点的详细信息。
	 */
	@RequestMapping(value="/getResSelect",method=RequestMethod.GET)
	public ModelAndView getResourceSel(@RequestParam(required=false) String permisid){
		//System.out.println("跳转到 权限操作页面:"+permisid);		
		if("".equals(permisid) || permisid==null){
			permisid="21";
		}
		Map<String,String> map = new HashMap<String,String>();
		map.put("permisid", permisid);
		List<Resource> resList = resourceMapper.subResBut(map);
			
		Map<String,Object> mapRs = new HashMap<String,Object>();
		mapRs.put("resList", resList);
		return new ModelAndView("resources-select",mapRs);
	}
}
